package com.yfyszk.kingbird.common.result;


import com.yfyszk.kingbird.common.exception.ResultEnum;
import lombok.Data;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;

import java.io.Serializable;

/**
 * 类名称：ApiResult
 * 类描述：ApiResult 后台管理系统返回结果类
 * 创建人：wgc
 * 创建时间：2018年03月30日 下午12:49:14
 */
@Data
@ToString
@Slf4j
public final class ApiResult<T extends Serializable> implements Serializable {


    private static final long serialVersionUID = 1L;

    /**
     * 错误码
     */
    private Integer code = ResultEnum.ERROR.getCode();

    /**
     * 错误信息
     */
    private String msg = null;

    /**
     * 返回结果实体
     */
    private Object data=null;


    public ApiResult() {
    }

    public ApiResult(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public ApiResult(int code, String msg, Object data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }

    /**
     * @param msg
     * @return com.kb.ccpims.common.result.ApiResult<T>  返回错误 带有自定义状态码和信息的错误
     * @author wgc
     * @date 2019/11/3 0003 15:31
     */
    public static <T extends Serializable> ApiResult<T> error(String msg) {
        return new ApiResult<T>(ResultEnum.ERROR.getCode(), msg);
    }

    /**
     * @param
     * @return com.kb.ccpims.common.result.ApiResult<T>  直接返回成功
     * @author wgc
     * @date 2019/11/3 0003 15:31
     */
    public static <T extends Serializable> ApiResult<T> success() {
        return new ApiResult<T>(ResultEnum.SUCCESS.getCode(), ResultEnum.SUCCESS.getMsg());
    }
    public static <T extends Serializable> ApiResult<T> success(String msg) {
        return new ApiResult<T>(ResultEnum.SUCCESS.getCode(), msg);
    }

    /**
     * @param data
     * @return com.kb.ccpims.common.result.ApiResult<T> 返回成功的业务数据
     * @author wgc
     * @date 2019/11/3 0003 15:31
     */
    public static <T extends Serializable> ApiResult<T> success(Object data) {
        log.debug("返回信息：data={}", data);
        return new ApiResult<T>(ResultEnum.SUCCESS.getCode(), ResultEnum.SUCCESS.getMsg(), data);
    }

    /**
     * @param code
     * @param msg
     * @param data
     * @return com.kb.ccpims.common.result.ApiResult<T>  返回成功 带有自定义的状态码和提示信息和业务数据
     * @author wgc
     * @date 2019/11/3 0003 15:32
     */
    public static <T extends Serializable> ApiResult<T> success(String msg, Object data) {
        return new ApiResult<T>(ResultEnum.SUCCESS.getCode(), msg, data);
    }

    /**
     * @param resultEnum
     * @return com.kb.ccpims.common.result.ApiResult<T>  返回错误信息带有枚举的
     * @author wgc
     * @date 2019/11/3 0003 15:33
     */
    public static <T extends Serializable> ApiResult<T> error(ResultEnum resultEnum) {
        log.debug("返回错误：code={}, msg={}", resultEnum.getCode(), resultEnum.getMsg());
        return new ApiResult<T>(resultEnum.getCode(), resultEnum.getMsg());
    }
}

